home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / epsilon / hotfix.py < prev    next >
Text File  |  2009-03-13  |  3KB  |  82 lines

  1.  
  2. import inspect
  3.  
  4. class NoSuchHotfix(Exception):
  5.     """
  6.     Man you must be pretty stupid.
  7.     """
  8.  
  9. _alreadyInstalled = set()
  10. def require(packageName, fixName):
  11.     if (packageName, fixName) in _alreadyInstalled:
  12.         return
  13.  
  14.     if (packageName, fixName) == ('twisted', 'filepath_copyTo'):
  15.         from twisted.python import filepath
  16.         if filepath.FilePath('a') != filepath.FilePath('a'):
  17.             from epsilon.hotfixes import filepath_copyTo
  18.             filepath_copyTo.install()
  19.     elif (packageName, fixName) == ('twisted', 'timeoutmixin_calllater'):
  20.         from twisted.protocols import policies
  21.         if not hasattr(policies.TimeoutMixin, 'callLater'):
  22.             from epsilon.hotfixes import timeoutmixin_calllater
  23.             timeoutmixin_calllater.install()
  24.     elif (packageName, fixName) == ('twisted', 'delayedcall_seconds'):
  25.         from twisted.internet import base
  26.         args = inspect.getargs(base.DelayedCall.__init__.func_code)[0]
  27.         if 'seconds' not in args:
  28.             from epsilon.hotfixes import delayedcall_seconds
  29.             delayedcall_seconds.install()
  30.     elif (packageName, fixName) == ('twisted', 'deferredgenerator_tfailure'):
  31.         from twisted.internet import defer
  32.         result = []
  33.         def test():
  34.             d = defer.waitForDeferred(defer.succeed(1))
  35.             yield d
  36.             result.append(d.getResult())
  37.         defer.deferredGenerator(test)()
  38.         if result == [1]:
  39.             from epsilon.hotfixes import deferredgenerator_tfailure
  40.             deferredgenerator_tfailure.install()
  41.         else:
  42.             assert result == [None]
  43.     elif (packageName, fixName) == ("twisted", "proto_helpers_stringtransport"):
  44.         from twisted.test.proto_helpers import StringTransport
  45.         st = StringTransport()
  46.         try:
  47.             st.write(u'foo')
  48.         except TypeError, e:
  49.             pass
  50.         else:
  51.             from epsilon.hotfixes import proto_helpers_stringtransport
  52.             proto_helpers_stringtransport.install()
  53.     elif (packageName, fixName) == ("twisted", "internet_task_Clock"):
  54.         from twisted.internet.task import Clock
  55.         from twisted.internet import base
  56.         from twisted import version
  57.         from epsilon.hotfixes import internet_task_clock
  58.         if internet_task_clock.clockIsBroken():
  59.             internet_task_clock.install()
  60.     elif (packageName, fixName) == ("twisted", "trial_assertwarns"):
  61.         from twisted.trial.unittest import TestCase
  62.         if not hasattr(TestCase, "failUnlessWarns"):
  63.             from epsilon.hotfixes import trial_assertwarns
  64.             trial_assertwarns.install()
  65.     elif (packageName, fixName) == ("twisted", "plugin_package_paths"):
  66.         try:
  67.             from twisted.plugin import pluginPackagePaths
  68.         except ImportError:
  69.             from epsilon.hotfixes import plugin_package_paths
  70.             plugin_package_paths.install()
  71.     elif (packageName, fixName) == ("twisted", "loopbackasync_reentrancy"):
  72.         # This one is really hard to detect reasonably.  Invoking the code
  73.         # involves triggering the reactor, which it would be good to avoid. 
  74.         # Just install it, but we should get rid of this as soon as 8.1 is
  75.         # no longer supported and 8.2 is required. -exarkun
  76.         from epsilon.hotfixes import loopbackasync_reentrancy
  77.         loopbackasync_reentrancy.install()
  78.     else:
  79.         raise NoSuchHotfix(packageName, fixName)
  80.  
  81.     _alreadyInstalled.add((packageName, fixName))
  82.